package com.example.common.domain.vo;

import com.example.common.enums.DifficultyLevel;
import com.example.common.enums.QuestionType;
import com.example.common.domain.pojo.Question;
import lombok.Data;

import java.sql.Timestamp;
import java.util.List;
import java.util.Map;

@Data
public class QuestionVo {
    private String id;                   //题目id
    private String questionText;
    private String courseId;       //课程id
    private QuestionType type;  //类型
    private DifficultyLevel difficulty;  //难度
    private Map<String, String> options;


    /**
     * 参考答案
     * 对于选择题: 可能是选项的Key (如 "A") 或选项内容。
     * 对于多选题: 可以是 List<String> (如 ["A", "C"])。
     * 对于填空题: 可以是 List<String>，每个元素对应一个空的答案。
     * 对于判断题: 可以是 "True" 或 "False" (或布尔值，但字符串更灵活)。
     * 对于简答/论述题: 是标准答案文本。
     */
    private List<String> correctAnswers; // 使用List以支持多答案（如多选题、多个填空）

    private String studentAnswer;          //学生答案

    private String explanation;   //解析
    private List<String> knowledgePoints;   // 知识点标签
    /**
     * 题目分数
     */
    private Double score;   //题目总分
    /**
     * 备注或提示信息
     */
    private String remarks;

    /**
     * 题目相关的媒体资源URL (例如，图片、音频、视频链接)
     */
    private String mediaUrl;

    private Timestamp createdAt;  //创建时间

    private Timestamp updatedAt;  //更新时间

    public static QuestionVo from(Question question) {
        QuestionVo dto = new QuestionVo();
        dto.setId(question.getId());
        dto.setQuestionText(question.getQuestionText());
        dto.setCourseId(question.getCourseId());
        dto.setType(question.getType());
        dto.setDifficulty(question.getDifficulty());
        dto.setExplanation(question.getExplanation());
        dto.setScore(question.getScore());
        dto.setRemarks(question.getRemarks());
        dto.setMediaUrl(question.getMediaUrl());
        dto.setCreatedAt(question.getCreatedAt());
        dto.setUpdatedAt(question.getUpdatedAt());

        dto.setCorrectAnswers(question.getCorrectAnswerList());
        dto.setKnowledgePoints(question.getKnowledgePointList());
        dto.setOptions(question.getOptionsMap());
        return dto;
    }
}
